package main

// 4.引入区块链
type BlockChain struct {
	//定义一个区块链数组
	Blocks []*Block
}

// 5.定义一个区块链
func NewBlockChain() *BlockChain {
	//创建一个创世块，并且作为第一个区块添加到区块链中
	genesisBlock := GenesisBlock("这是一个创世区块")
	//初始化区块链
	BlockChain := BlockChain{
		Blocks: []*Block{genesisBlock},
	}
	//创建创世区块

	return &BlockChain
}

// 创世块
func GenesisBlock(data string) *Block {
	//创建一个创世区块
	return NewBlock(data, []byte{})
}

// 5.添加区块链（实现AddBlock方法）
func (bc *BlockChain) AddBlock(data string) {
	//获取最后一个区块
	lastBlock := bc.Blocks[len(bc.Blocks)-1]
	//创建新的区块（在最后一个区块的hash是新区块的前hash）
	newBlock := NewBlock(data, lastBlock.Hash)
	//将新的区块添加到区块链中
	bc.Blocks = append(bc.Blocks, newBlock)
}
